iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
0
自我挑戰組

Ruby on Rails 與它們相關的東西系列 第 19

Day19 - Ruby on Rails 測試篇 - RSpec

  • 分享至 

  • xImage
  •  

前言

身為一名 Ruby on Rails 工程師,幾乎都有寫過 RSpec
測試本身與開發是一樣重要的,有聽過一詞是開發時間緊迫,沒時間寫測試,
要趕在截止日前完成功能,都要來不及了,有空再補...(通常就是沒下文
後續的維護成本、技術債反而會更高,
且要修改時,若有測試涵蓋的話,也比較不用擔心改 A 壞 B,
還能幫助你避開低級錯誤 (像是語法錯誤等)

後續的文章會以此 repo 作為範例


如何安裝

放在 :development, :test group 裡面,或參考此 commit

參考資料: https://relishapp.com/rspec/rspec-rails/docs

# Gemfile
gem 'rspec-rails', '~> 4.0.0'

# 記得要 bundle

接著再終端機輸入,可參考此 commit

rails generate rspec:install

# 也可縮寫成
rails g rspec:install

產生範例 spec

由於之前已經透過 scaffold 建立 User
欲透過指令補產生相關測試檔案的話,在終端機輸入以下

rails g rspec:scaffold user

若不透過指令,也可手動新增檔案,或參考此 commit

備註:

  1. 原本我也不知道要這樣下指令,透過 rails g -h 的技巧,看有哪些參數可以使用 (若不清楚,可以看前面寫的 Linux 指令文章 manhelptldr,非常受用的技巧)
  2. 若已經有先裝 RSpec ,透過 scaffold 產生檔案時,便會一起產生 spec.rb 的相關檔案

如何執行

終端機輸入

# 跑全部的測試
rspec
rspec spec

# 跑特定資料夾的測試
rspec spec/routing/

# 跑特定檔案的測試
rspec spec/routing/users_routing_spec.rb

# 跑特定檔案某一個測試
rspec spec/routing/users_routing_spec.rb:22

如何讓 CI 也能跑 rspec

將原本 CI 設定檔新增以下,可參考此 commit

bundle exec rspec

推薦網站

想提升自己 RSpec 寫法的話,可參考 Better Specs 此網站


小結

測試非常的重要,但也別把測試當萬靈丹,它只能幫忙測出有涵蓋到的情境 (假設測試的情境、準備的答案、寫的測試都是對的),依然無法測出沒想到的情境,未來再修改 code 時,也可能發現原本考量的情境已經變了,這時便需要調整測試本身

測試本身,其實就可以寫成 30 天的文章,自成一個生態圈,且還有許多相關的 Gem 相輔相成,像是 factory_botDatabase CleanertimecopCapybaraSimpleCovFakeRedis...等,將來有機會再視情況寫成文章...

本篇其實寫的蠻精簡的 XD (逃,下篇會講另一個測試套件 Cucumber


鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10242906
medium 文章連結:https://link.medium.com/M8qWBUbd19
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主


上一篇
Day18 - Ruby on Rails 中的 Logger 紀錄的介紹與應用
下一篇
Day20 - Ruby on Rails 測試篇 - Cucumber (內文有範例教如何寫中文測試)
系列文
Ruby on Rails 與它們相關的東西31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言